home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / x86 / include / asm / vmi.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  7.3 KB  |  270 lines

  1. /*
  2.  * VMI interface definition
  3.  *
  4.  * Copyright (C) 2005, VMware, Inc.
  5.  *
  6.  * This program is free software; you can redistribute it and/or modify
  7.  * it under the terms of the GNU General Public License as published by
  8.  * the Free Software Foundation; either version 2 of the License, or
  9.  * (at your option) any later version.
  10.  *
  11.  * This program is distributed in the hope that it will be useful, but
  12.  * WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
  14.  * NON INFRINGEMENT.  See the GNU General Public License for more
  15.  * details.
  16.  *
  17.  * You should have received a copy of the GNU General Public License
  18.  * along with this program; if not, write to the Free Software
  19.  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  20.  *
  21.  * Maintained by: Zachary Amsden zach@vmware.com
  22.  *
  23.  */
  24. #include <linux/types.h>
  25.  
  26. /*
  27.  *---------------------------------------------------------------------
  28.  *
  29.  *  VMI Option ROM API
  30.  *
  31.  *---------------------------------------------------------------------
  32.  */
  33. #define VMI_SIGNATURE 0x696d5663   /* "cVmi" */
  34.  
  35. #define PCI_VENDOR_ID_VMWARE            0x15AD
  36. #define PCI_DEVICE_ID_VMWARE_VMI        0x0801
  37.  
  38. /*
  39.  * We use two version numbers for compatibility, with the major
  40.  * number signifying interface breakages, and the minor number
  41.  * interface extensions.
  42.  */
  43. #define VMI_API_REV_MAJOR       3
  44. #define VMI_API_REV_MINOR       0
  45.  
  46. #define VMI_CALL_CPUID            0
  47. #define VMI_CALL_WRMSR            1
  48. #define VMI_CALL_RDMSR            2
  49. #define VMI_CALL_SetGDT            3
  50. #define VMI_CALL_SetLDT            4
  51. #define VMI_CALL_SetIDT            5
  52. #define VMI_CALL_SetTR            6
  53. #define VMI_CALL_GetGDT            7
  54. #define VMI_CALL_GetLDT            8
  55. #define VMI_CALL_GetIDT            9
  56. #define VMI_CALL_GetTR            10
  57. #define VMI_CALL_WriteGDTEntry        11
  58. #define VMI_CALL_WriteLDTEntry        12
  59. #define VMI_CALL_WriteIDTEntry        13
  60. #define VMI_CALL_UpdateKernelStack    14
  61. #define VMI_CALL_SetCR0            15
  62. #define VMI_CALL_SetCR2            16
  63. #define VMI_CALL_SetCR3            17
  64. #define VMI_CALL_SetCR4            18
  65. #define VMI_CALL_GetCR0            19
  66. #define VMI_CALL_GetCR2            20
  67. #define VMI_CALL_GetCR3            21
  68. #define VMI_CALL_GetCR4            22
  69. #define VMI_CALL_WBINVD            23
  70. #define VMI_CALL_SetDR            24
  71. #define VMI_CALL_GetDR            25
  72. #define VMI_CALL_RDPMC            26
  73. #define VMI_CALL_RDTSC            27
  74. #define VMI_CALL_CLTS            28
  75. #define VMI_CALL_EnableInterrupts    29
  76. #define VMI_CALL_DisableInterrupts    30
  77. #define VMI_CALL_GetInterruptMask    31
  78. #define VMI_CALL_SetInterruptMask    32
  79. #define VMI_CALL_IRET            33
  80. #define VMI_CALL_SYSEXIT        34
  81. #define VMI_CALL_Halt            35
  82. #define VMI_CALL_Reboot            36
  83. #define VMI_CALL_Shutdown        37
  84. #define VMI_CALL_SetPxE            38
  85. #define VMI_CALL_SetPxELong        39
  86. #define VMI_CALL_UpdatePxE        40
  87. #define VMI_CALL_UpdatePxELong        41
  88. #define VMI_CALL_MachineToPhysical    42
  89. #define VMI_CALL_PhysicalToMachine    43
  90. #define VMI_CALL_AllocatePage        44
  91. #define VMI_CALL_ReleasePage        45
  92. #define VMI_CALL_InvalPage        46
  93. #define VMI_CALL_FlushTLB        47
  94. #define VMI_CALL_SetLinearMapping    48
  95.  
  96. #define VMI_CALL_SetIOPLMask        61
  97. #define VMI_CALL_SetInitialAPState    62
  98. #define VMI_CALL_APICWrite        63
  99. #define VMI_CALL_APICRead        64
  100. #define VMI_CALL_IODelay        65
  101. #define VMI_CALL_SetLazyMode        73
  102.  
  103. /*
  104.  *---------------------------------------------------------------------
  105.  *
  106.  * MMU operation flags
  107.  *
  108.  *---------------------------------------------------------------------
  109.  */
  110.  
  111. /* Flags used by VMI_{Allocate|Release}Page call */
  112. #define VMI_PAGE_PAE             0x10  /* Allocate PAE shadow */
  113. #define VMI_PAGE_CLONE           0x20  /* Clone from another shadow */
  114. #define VMI_PAGE_ZEROED          0x40  /* Page is pre-zeroed */
  115.  
  116.  
  117. /* Flags shared by Allocate|Release Page and PTE updates */
  118. #define VMI_PAGE_PT              0x01
  119. #define VMI_PAGE_PD              0x02
  120. #define VMI_PAGE_PDP             0x04
  121. #define VMI_PAGE_PML4            0x08
  122.  
  123. #define VMI_PAGE_NORMAL          0x00 /* for debugging */
  124.  
  125. /* Flags used by PTE updates */
  126. #define VMI_PAGE_CURRENT_AS      0x10 /* implies VMI_PAGE_VA_MASK is valid */
  127. #define VMI_PAGE_DEFER           0x20 /* may queue update until TLB inval */
  128. #define VMI_PAGE_VA_MASK         0xfffff000
  129.  
  130. #ifdef CONFIG_X86_PAE
  131. #define VMI_PAGE_L1        (VMI_PAGE_PT | VMI_PAGE_PAE | VMI_PAGE_ZEROED)
  132. #define VMI_PAGE_L2        (VMI_PAGE_PD | VMI_PAGE_PAE | VMI_PAGE_ZEROED)
  133. #else
  134. #define VMI_PAGE_L1        (VMI_PAGE_PT | VMI_PAGE_ZEROED)
  135. #define VMI_PAGE_L2        (VMI_PAGE_PD | VMI_PAGE_ZEROED)
  136. #endif
  137.  
  138. /* Flags used by VMI_FlushTLB call */
  139. #define VMI_FLUSH_TLB            0x01
  140. #define VMI_FLUSH_GLOBAL         0x02
  141.  
  142. /*
  143.  *---------------------------------------------------------------------
  144.  *
  145.  *  VMI relocation definitions for ROM call get_reloc
  146.  *
  147.  *---------------------------------------------------------------------
  148.  */
  149.  
  150. /* VMI Relocation types */
  151. #define VMI_RELOCATION_NONE     0
  152. #define VMI_RELOCATION_CALL_REL 1
  153. #define VMI_RELOCATION_JUMP_REL 2
  154. #define VMI_RELOCATION_NOP    3
  155.  
  156. #ifndef __ASSEMBLY__
  157. struct vmi_relocation_info {
  158.     unsigned char           *eip;
  159.     unsigned char           type;
  160.     unsigned char           reserved[3];
  161. };
  162. #endif
  163.  
  164.  
  165. /*
  166.  *---------------------------------------------------------------------
  167.  *
  168.  *  Generic ROM structures and definitions
  169.  *
  170.  *---------------------------------------------------------------------
  171.  */
  172.  
  173. #ifndef __ASSEMBLY__
  174.  
  175. struct vrom_header {
  176.     u16     rom_signature;  /* option ROM signature */
  177.     u8      rom_length;     /* ROM length in 512 byte chunks */
  178.     u8      rom_entry[4];   /* 16-bit code entry point */
  179.     u8      rom_pad0;       /* 4-byte align pad */
  180.     u32     vrom_signature; /* VROM identification signature */
  181.     u8      api_version_min;/* Minor version of API */
  182.     u8      api_version_maj;/* Major version of API */
  183.     u8      jump_slots;     /* Number of jump slots */
  184.     u8      reserved1;      /* Reserved for expansion */
  185.     u32     virtual_top;    /* Hypervisor virtual address start */
  186.     u16     reserved2;      /* Reserved for expansion */
  187.     u16    license_offs;    /* Offset to License string */
  188.     u16     pci_header_offs;/* Offset to PCI OPROM header */
  189.     u16     pnp_header_offs;/* Offset to PnP OPROM header */
  190.     u32     rom_pad3;       /* PnP reserverd / VMI reserved */
  191.     u8      reserved[96];   /* Reserved for headers */
  192.     char    vmi_init[8];    /* VMI_Init jump point */
  193.     char    get_reloc[8];   /* VMI_GetRelocationInfo jump point */
  194. } __attribute__((packed));
  195.  
  196. struct pnp_header {
  197.     char sig[4];
  198.     char rev;
  199.     char size;
  200.     short next;
  201.     short res;
  202.     long devID;
  203.     unsigned short manufacturer_offset;
  204.     unsigned short product_offset;
  205. } __attribute__((packed));
  206.  
  207. struct pci_header {
  208.     char sig[4];
  209.     short vendorID;
  210.     short deviceID;
  211.     short vpdData;
  212.     short size;
  213.     char rev;
  214.     char class;
  215.     char subclass;
  216.     char interface;
  217.     short chunks;
  218.     char rom_version_min;
  219.     char rom_version_maj;
  220.     char codetype;
  221.     char lastRom;
  222.     short reserved;
  223. } __attribute__((packed));
  224.  
  225. /* Function prototypes for bootstrapping */
  226. #ifdef CONFIG_VMI
  227. extern void vmi_init(void);
  228. extern void vmi_activate(void);
  229. extern void vmi_bringup(void);
  230. #else
  231. static inline void vmi_init(void) {}
  232. static inline void vmi_activate(void) {}
  233. static inline void vmi_bringup(void) {}
  234. #endif
  235.  
  236. /* State needed to start an application processor in an SMP system. */
  237. struct vmi_ap_state {
  238.     u32 cr0;
  239.     u32 cr2;
  240.     u32 cr3;
  241.     u32 cr4;
  242.  
  243.     u64 efer;
  244.  
  245.     u32 eip;
  246.     u32 eflags;
  247.     u32 eax;
  248.     u32 ebx;
  249.     u32 ecx;
  250.     u32 edx;
  251.     u32 esp;
  252.     u32 ebp;
  253.     u32 esi;
  254.     u32 edi;
  255.     u16 cs;
  256.     u16 ss;
  257.     u16 ds;
  258.     u16 es;
  259.     u16 fs;
  260.     u16 gs;
  261.     u16 ldtr;
  262.  
  263.     u16 gdtr_limit;
  264.     u32 gdtr_base;
  265.     u32 idtr_base;
  266.     u16 idtr_limit;
  267. };
  268.  
  269. #endif
  270.